package com.core.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
import com.common.constants.CaptchaConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Slf4j
@RestController
public class VerifyCodeImageController {

    /** 生成验证码 */
    @RequestMapping(value = "/getVerifyCode", method = RequestMethod.GET)
    public void getVerify(HttpServletRequest request, HttpServletResponse response) throws IOException {

//    // 从session中获取随机数，并设置 key："RANDOM_CODE_KEY" value：验证码
//    try {
//      response.setContentType("image/jpeg"); // 设置相应类型,告诉浏览器输出的内容为图片
//      response.setHeader("Pragma", "No-cache"); // 设置响应头信息，告诉浏览器不要缓存此内容
//      response.setHeader("Cache-Control", "no-cache");
//      response.setDateHeader("Expire", 0);
//      RandomValidateCodeUtils randomValidateCode = new RandomValidateCodeUtils();
//      // 设置 key："RANDOM_CODE_KEY" value：验证码
//      randomValidateCode.getRandCodeImage(request, response); // 输出验证码图片方法
//    } catch (Exception e) {
//      log.error("获取验证码失败>>>> ", e);
//    }

        // 自定义纯数字的验证码（随机4位数字，可重复）
        RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4);
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(200, 100,4, 20);
        circleCaptcha.setGenerator(randomGenerator);
        // 重新生成code
        circleCaptcha.createCode();

        // 设置响应类型为 PNG
        response.setContentType("image/png");
        // 禁止缓存
        response.setHeader("Cache-Control", "no-store, no-cache");
        //图形验证码写出，可以写出到文件，也可以写出到流
        circleCaptcha.write(response.getOutputStream());
        //获取验证码中的文字内容
        String verifyCode = circleCaptcha.getCode();
        log.info("生成验证码：{}",verifyCode);
        request.getSession().setAttribute(CaptchaConstant.CAPTCHA_KEY,verifyCode);

//    //定义图形验证码的长、宽、验证码字符数、干扰元素个数
//    CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
//    // 设置响应类型为 PNG
//    response.setContentType("image/png");
//    // 禁止缓存
//    response.setHeader("Cache-Control", "no-store, no-cache");
//    //图形验证码写出，可以写出到文件，也可以写出到流
//      captcha.write(response.getOutputStream());
//    //获取验证码中的文字内容
//    String verifyCode = captcha.getCode();
//    log.info("验证码：{}",verifyCode);
//    request.getSession().setAttribute(CaptchaConstant.CAPTCHA_KEY,verifyCode);

//    //定义图形验证码的长和宽
//    LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
//    //图形验证码写出，可以写出到文件，也可以写出到流
//      lineCaptcha.write(response.getOutputStream());
//      //获取验证码中的文字内容
//      String verifyCode = lineCaptcha.getCode();
//      request.getSession().setAttribute(CaptchaConstant.CAPTCHA_KEY,verifyCode);
    }

}
